Assignment operators

From Cppreference

Jump to: navigation, search

Assignment operators modify the value of the object.

Operator name Syntax Over​load​able Prototype examples (for class T​)
Inside class definition Outside class definition
basic assignment a = b Yes ​T& T::operator =(const T2 &b); N/A
move assignment (C++0x) a = rvalue Yes ​T& T::operator =(const T2 &&b); N/A
addition assignment a += b Yes ​T& T::operator +=(const T2 &b); ​T& operator +=(T &a, const T2 &b);
subtraction assignment a -= b Yes ​T& T::operator -=(const T2 &b); ​T& operator -=(T &a, const T2 &b);
multiplication assignment a *= b Yes ​T& T::operator *=(const T2 &b); ​T& operator *=(T &a, const T2 &b);
division assignment a /= b Yes ​T& T::operator /=(const T2 &b); ​T& operator /=(T &a, const T2 &b);
modulo assignment a %= b Yes ​T& T::operator %=(const T2 &b); ​T& operator %=(T &a, const T2 &b);
bitwise AND assignment a &= b Yes ​T& T::operator &=(const T2 &b); ​T& operator &=(T &a, const T2 &b);
bitwise OR assignment a |= b Yes ​T& T::operator |=(const T2 &b); ​T& operator |=(T &a, const T2 &b);
bitwise XOR assignment a ^= b Yes ​T& T::operator ^=(const T2 &b); ​T& operator ^=(T &a, const T2 &b);
bitwise left shift assignment a <<= b Yes ​T& T::operator <<=(const T2 &b); ​T& operator <<=(T &a, const T2 &b);
bitwise right shift assignment a >>= b Yes ​T& T::operator >>=(const T2 &b); ​T& operator >>=(T &a, const T2 &b);
Notes
  • All operators usually return *this. However, essentially any value and any type can be returned (including void,
    i.e. no return value), yet this is unintuitive and defeats the purpose of the operators.
  • T2 can be any type including T

[edit] Explanation

basic assignment operator replaces the contents of the object a with those of b

move assignment operator replaces the contents of the object a with those of b while minimizing copying overhead (no deep copy is performed). It complements the basic assignment operator.

Other assignment operators modify the contents of the object. Usually they are overloaded in classed performing mathematical operations.

[edit] See also

Operator precedence

Common operators
assignment increment
decrement
arithmetic comparison member
access
other
​a = b

a = rvalue
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b​

++a

--a
a++
a--

​a + b

a - b
a * b
a / b
a % b
a & b
a | b
a ^ b
a << b
a >> b​

​a == b

a != b
a < b
a > b
a <= b
a >= b​

​a[b]

*a
&a
a->b
a.b
a->*b
a.*b​

​a(...)

a, b
(type) a
? :

Special operators

static_cast converts one type to another compatible type
dynamic_cast converts virtual base class to derived class
const_cast converts type to compatible type with different cv qualifiers
reinterpret_cast converts type to incompatible type
new allocates memory
delete deallocates memory
sizeof queries the size of a type
typeid queries the type information of a type
noexcept checks if an expression can throw an exception (C++0x)
alignof queries alignment requirements of a type (C++0x)

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
In other languages